home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- *
- * NSSDC/CDF CDFskeleton. Part 1 of 2.
- *
- * Version 1.0, 4-Mar-92, ST Systems (STX)
- *
- * Modification history:
- *
- * V1.0 4-Mar-92, S Sudarsan Original version. This is a crunching
- * J Love together of all the separate files which
- * used to make up CDFskeleton. Two source
- * files necessary for IBM PC compilation.
- *
- ******************************************************************************/
-
- #include "cdfdist.h"
-
- #define SKT2CDF /* For global/external variables. Only defined in one
- of the source files for CDFskeleton. */
- #include "skt2cdf.h"
-
- /******************************************************************************
- * Online instructions.
- ******************************************************************************/
-
- static char *instructions[] = {
- #if defined(vms)
- "Usage: $ CDFSKELETON [/CDF=<cdf-path>] [/[no]LOG] [/[no]DELETE]",
- " <skeleton-path>",
- #endif
- #if defined(unix)
- "Usage: % cdfskeleton [-cdf <cdf-path>] [-[no]log] [-[no]delete]",
- " <skeleton-path>",
- #endif
- #if defined(__MSDOS__)
- "Usage: > cdfskeleton [-cdf <cdf-path>] [-[no]log] [-[no]delete]",
- " <skeleton-path>",
- #endif
- "",
- "Purpose: CDFskeleton produces a CDF from a skeleton table.",
- "",
- " A skeleton table is a text file which is read ",
- " by the CDFskeleton program to build a skeleton CDF.",
- "",
- "Parameter(s): <skeleton-path>",
- " The pathname of the skeleton table file (without its",
- " extension). Required.",
- "",
- #if defined(vms)
- "Qualifier(s): /CDF=<cdf-path>",
- #endif
- #if defined(unix) | defined(__MSDOS__)
- "Qualifier(s): -cdf cdf-path>",
- #endif
- " <cdf-path> is the pathname of the CDF that will be built",
- " (overriding the pathname in the skeleton table). Optional.",
- "",
- #if defined(vms)
- " /[no]LOG",
- #endif
- #if defined(unix) | defined(__MSDOS__)
- " -[no]log",
- #endif
- " Specifies whether or not messages are displayed as the",
- " program executes. The default is logging disabled.",
- "",
- #if defined(vms)
- " /[no]DELETE",
- #endif
- #if defined(unix) | defined(__MSDOS__)
- " -[no]delete",
- #endif
- " Specifies whether or not the CDF should be deleted if it",
- " already exists. The default is not to delete the CDF.",
- "",
- #if defined(vms)
- "Example(s): $ CDFSKELETON/NOLOG/DELETE SSCLIMATE",
- " $ CDFSKELETON/CDF=SSCLIMATEX SSCLIMATE",
- #endif
- #if defined(unix)
- "Example(s): % cdfskeleton -nolog -delete ssclimate",
- " % cdfskeleton -cdf ../ssclimatex ssclimate",
- #endif
- #if defined(__MSDOS__)
- "Example(s): > cdfskeleton -nolog -delete ssclim",
- " > cdfskeleton -cdf ssclimx a:\\cdfs\\ssclim",
- #endif
- NULL };
-
- /******************************************************************************
- * Main (CDFskeleton).
- ******************************************************************************/
-
- #if defined(vms)
- main (argc, argv)
- #else
- void main (argc, argv)
- #endif
- int argc;
- char *argv[];
- {
-
- char stfname[64];
- char openname[64]; /* V1.1 */
-
- Boolean delete_if_exists;
-
- long count;
- static char *validQuals[] = { "cdf*", "log", "nolog",
- "delete", "nodelete", NULL };
- static int optRequired[] = { TRUE, FALSE, FALSE,
- FALSE, FALSE, 0 };
- QOP *qop;
-
- switch (argc) {
- case 1:
- PageInst (instructions);
- Exit;
- default:
- qop = Qop (argc, argv, validQuals, optRequired);
- if (qop == NULL) ExitBAD;
-
- if (qop->Nparms < 1) {
- printf ("Missing parameter\n");
- ExitBAD;
- }
- else {
- strcpy (stfname, qop->parms[0]);
- strcpy (sname, qop->parms[0]);
- }
-
- if (qop->qualEntered[0]) {
- cdf_name = (char *) malloc (strlen(qop->qualOpt[0]) + 1);
- strcpy (cdf_name, qop->qualOpt[0]);
- }
- else
- cdf_name = NULL;
-
- count = 0;
- if (qop->qualEntered[1]) count++;
- if (qop->qualEntered[2]) count++;
-
- switch (count) {
- case 0:
- mLog = FALSE;
- break;
- case 1:
- if (qop->qualEntered[1])
- mLog = TRUE;
- else
- mLog = FALSE;
- break;
- default:
- printf ("Conflicting qualifiers.\n");
- ExitBAD;
- }
-
- count = 0;
- if (qop->qualEntered[3]) count++;
- if (qop->qualEntered[4]) count++;
-
- switch (count) {
- case 0:
- delete_if_exists = FALSE;
- break;
- case 1:
- if (qop->qualEntered[3])
- delete_if_exists = TRUE;
- else
- delete_if_exists = FALSE;
- break;
- default:
- printf ("Conflicting qualifiers.\n");
- ExitBAD;
- }
- }
-
- strcpy (openname, stfname); /* V1.1...*/
- strcat (openname, ".skt");
-
- file_ptr = fopen (openname, "r");
- if (file_ptr == NULL) {
- strcpy (openname, stfname);
- strcat (openname, ".skeleton_table");
- file_ptr = fopen (openname, "r");
- if (file_ptr == NULL) {
- if (mLog) printf ("\nCDF SKELETON TABLE NOT FOUND :%s", stfname);
- ExitBAD;
- }
- } /* ...V1.1 */
-
- AnalyseHeader(delete_if_exists); /* V1.1 */
- if (mLog) fprintf(stdout,"\n Reading Global Attributes....\n");
- AnalyseGlobalAttr();
- if (mLog) fprintf(stdout,"\n Reading Variable Attributes....\n");
- AnalyseVariableAttr();
- if (mLog) fprintf(stdout,"\n Reading Variables....\n");
- AnalyseVariables();
- Exit;
- } /* end main */
-
- /*------------------------------------------------------------------*/
- static void AnalyseHeader(delete_if_exists) /* V1.1 */
- Boolean delete_if_exists;
- {
-
- long hdr_flag = 0, len, index, o_flag;
-
- char *buff, dummy[10],
- *encoding, *majority, *ptr;
-
- while(hdr_flag != 1)/* to first seek the "#header" */
- {
-
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) fprintf(stderr,"\nINCORRECT HEADER SPECIFICATION\n");
- ExitBAD;
- }
-
-
- len = strlen(obuffer);/* to insert in the end */
-
- *(obuffer + (len - 1)) = '\0';
-
- buff = TrimBlanks(obuffer);/* get past white spaces before
- the header */
-
- switch(*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- case '#':
- {
- if(strncmp(buff,"#header",7)==0)
- {
- buff = buff + strlen("#header");
- /* get past the above */
- switch(*buff)
- {
- case '\0':
- hdr_flag++;
- break;
- case '!':
- hdr_flag++;
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT HEADER SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- break;
- }/* end switch */
- }/* end if*/
- else if(strncmp(buff,"#end",4) == 0)
- {
- /*CloseCDF();*/
- buff = buff + 4;
-
- switch(*buff)
- {
- case '!':
- break;
- case '\0':
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT HEADER SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- break;
- }/* end switch */
-
- ExitBAD;/* not closing the CDF because not created it */
-
- }/* end else */
- else/* not #header or #end */
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT HEADER SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }/* end else */
- }/* end case # */
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT HEADER SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- break;
- }/* end switch */
- } /* end while */
-
- hdr_flag = 0;/* reinitialise */
-
- while(hdr_flag != 1)/* for output file name */
- {
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT HEADER SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
- len = strlen(obuffer);
-
- *(obuffer + (len-1)) = '\0';
-
- buff = TrimBlanks(obuffer);
-
- switch(*buff)/* to look for output file name */
- {
- case '\0':
- break;
- case '!':
- break;
- default :
- {
- len = StringTraverse(buff);
-
- if((strncmp(buff,"OUTPUT", 6) != 0)&&
- (strncmp(buff,"output", 6) != 0)&&
- (strncmp(buff, "cdf", 3) != 0)&&
- (strncmp(buff, "CDF", 3) != 0))
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT OUTPUT FILE/CDF NAME SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
-
- if((strncmp(buff,"OUTPUT", 6) == 0)||
- (strncmp(buff,"output", 6) == 0))
- o_flag = 1;
- else
- o_flag = 2;
-
- buff = buff + len;/* to get past output */
-
- buff = TrimBlanks(buff);
-
-
- if((*buff == '\0')||(*buff == '!'))/* if it ends there */
- buff = ProcessWrapLines
- (file_ptr, obuffer,
- "Incorrect CDF/Output File Name Specification\n");
-
-
- if(o_flag == 1)/* for output file */
- {
- if((strncmp(buff,"file", 4) != 0)&&
- (strncmp(buff,"FILE", 4) != 0))
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT CDF/OUTPUT FILE NAME SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
- len = StringTraverse(buff);
-
- buff = buff + len;/* to get past file */
-
- buff = TrimBlanks(buff);
-
-
- if((*buff == '\0')||(*buff == '!'))/* if it ends there */
- buff = ProcessWrapLines
- (file_ptr, obuffer,
- "Incorrect CDF/Output File Name Specification\n");
-
- }
-
- if((strncmp(buff,"name", 4) == 0)&&
- (strncmp(buff,"NAME", 4) == 0))
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT CDF/OUTPUT FILE NAME SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
- buff = buff + 4;/* get past the name */
-
- buff = TrimBlanks(buff);
-
-
- if((*buff == '\0')||(*buff == '!'))/* if it ends there */
- buff = ProcessWrapLines
- (file_ptr, obuffer,
- "Incorrect CDF/Output File Name Specification\n");
-
- switch (*buff)
- {
- case ':':
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT CDF/OUTPUT FILE NAME SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- break;
- }/* end switch*/
-
- buff++;/* to move past the : */
-
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))/* if it ends there */
- buff = ProcessWrapLines
- (file_ptr, obuffer,
- "Incorrect CDF/Output File Name Specification\n");
-
-
- len = StringTraverse(buff);/* to reach end of file name */
-
- if(cdf_name == NULL) /* V1.1 */
- {
- cdf_name = (char *) malloc(len + 1);
- strncpy(cdf_name, buff, len);
- *(cdf_name + len) = '\0';
- }
-
- if (mLog) printf("CDF name %s\n", cdf_name);
-
-
- buff = buff + len;/* move past the file name */
-
- buff = TrimBlanks(buff);
-
- switch (*buff)
- {
- case '\0':
- hdr_flag++;
- break;
- case '!':
- hdr_flag++;
- break;
- default:/* unrecognizable char after file name */
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT CDF/OUTPUT FILE NAME SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- break;
- }/* end switch */
- }
- break;
- }/* end switch */
-
- }/* end while */
-
-
- hdr_flag = 0; /* reinitialise for data encoding */
-
- while(hdr_flag != 1)/* data encoding */
- {
-
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog)
- fprintf(stderr,"\nINCORRECT DATA ENCODING SPECIFICATION\n");
- ExitBAD;
- }
-
- len = strlen(obuffer);
- obuffer[len-1] = '\0';
-
- buff = TrimBlanks(&obuffer[0]);
-
- switch (*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- default:
- {
- len = StringTraverse(buff);
-
- if((strncmp(buff, "DATA", len) != 0)&&
- (strncmp(buff, "data", len) != 0))
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT DATA ENCODING SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
- buff = buff + len;/* get past data */
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))/* if it ends there */
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT DATA ENCODING SPECIFICATION\n");
-
-
-
- if((strncmp(buff, "ENCODING", 8) != 0)&&
- (strncmp(buff, "encoding", 8) != 0))
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT DATA ENCODING SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
- buff = buff + 8;/* to get past encoding */
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT DATA ENCODING SPECIFICATION\n");
-
- switch(*buff)
- {
- case ':':
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT DATA ENCODING SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- break;
- }/* end switch */
-
- buff++;/* to move past the : */
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT DATA ENCODING SPECIFICATION\n");
-
- len = StringTraverse(buff);/* to reach the end */
-
- encoding = (char *) malloc(len + 1);
-
- *(encoding + len) = '\0';
-
- strncpy(encoding, buff, len);
-
- if (mLog) printf("Encoding %s\n", encoding);
-
- if(strncmp(strupper(encoding), "HOST",4) == 0)
- coding = HOST_ENCODING;
- else if(strncmp(strupper(encoding), "NETWORK",7) == 0)
- coding = NETWORK_ENCODING;
- else if(strncmp(strupper(encoding), "MIPSEL",6) == 0)
- coding = MIPSEL_ENCODING;
- else if(strncmp(strupper(encoding), "MIPSEB",6) == 0)
- coding = MIPSEB_ENCODING;
- else if(strncmp(strupper(encoding), "SUN",3) == 0)
- coding = SUN_ENCODING;
- else if(strncmp(strupper(encoding), "VAX",3) == 0)
- coding = VAX_ENCODING;
- else if(strncmp(strupper(encoding), "IBMRS",5) == 0)
- coding = IBMRS_ENCODING;
- else if(strncmp(strupper(encoding), "IBMPC",5) == 0)
- coding = IBMPC_ENCODING;
- else if(strncmp(strupper(encoding), "HP",2) == 0)
- coding = HP_ENCODING;
- else
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT DATA ENCODING SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
- buff = buff + len;
-
- buff = TrimBlanks(buff);
-
- switch(*buff)
- {
- case '\0':
- hdr_flag++;
- break;
- case '!':
- hdr_flag++;
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT DATA ENCODING SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- break;
- }/* end switch*/
- }
- break;
- }/* end switch */
- }/* end while */
-
- /******************/
- hdr_flag = 0; /* reinitialise for majority */
-
- while(hdr_flag != 1)/* majority*/
- {
-
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) fprintf(stderr,"\nINCORRECT MAJORITY SPECIFICATION\n");
- ExitBAD;
- }
-
- len = strlen(obuffer);
- *(obuffer + (len-1)) = '\0';
- buff = TrimBlanks(obuffer);
- switch (*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- default:
- {
- len = StringTraverse(buff);
-
- if((strncmp(buff, "MAJORITY", 8) != 0)&&
- (strncmp(buff, "majority", 8) != 0))
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT MAJORITY SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
- buff = buff + 8;/* get past majority */
-
-
- buff = TrimBlanks(buff);
-
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT MAJORITY SPECIFICATION\n");
-
- if(*buff != ':')
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT MAJORITY SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
- buff++;/* get past the : */
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT MAJORITY SPECIFICATION\n");
-
- len = StringTraverse(buff);/* to reach the end */
- majority = (char *) malloc(len + 1);
-
- *(majority + len) = '\0';
- strncpy(majority, buff, len);
- if (mLog) printf("Majority %s\n", majority);
- if(strncmp(strupper(majority),"ROW", 3) == 0)
- major1 = ROW_MAJOR;
- else if (strncmp(strupper(majority),"COLUMN", 6) == 0)
- major1 = COL_MAJOR;
- else
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT MAJORITY SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- buff = buff + len;
-
- buff = TrimBlanks(buff);
-
- switch(*buff)
- {
- case '\0':
- hdr_flag++;
- break;
- case '!':
- hdr_flag++;
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT MAJORITY SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- break;
- }/* end switch*/
- }
- break;
- }/* end switch */
- }/* end while */
- /*******************/
-
-
- /******************/
- hdr_flag = 0;/* reinitialise for cdf info*/
-
- while(hdr_flag != 1)/* CDF info*/
- {
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) fprintf(stderr,"\nINCORRECT CDF INFORMATION\n");
- ExitBAD;
- }
-
- len = strlen(obuffer);
- obuffer[len-1] = '\0';
-
- buff = TrimBlanks(&obuffer[0]);
-
- switch(*buff)
- {
- case '\0':
- break;
- case '!' :
- break;
- default:
- {
- hdr_flag++;
- }
- break;
- }/* end switch */
- }/* end while */
-
-
- if(isdigit(*buff)== 0)/* if the 1 char encountered is not a digit */
- {
-
- if((strncmp(buff, "FORMAT", 6) != 0)&&
- (strncmp(buff, "format", 6) != 0))
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT FORMAT SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- ExitBAD;
- }
-
- buff = buff + 6;
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT FORMAT SPECIFICATION\n");
-
- if(*buff != ':')
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT FORMAT SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- ExitBAD;
- }
-
- buff++;
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT FORMAT SPECIFICATION\n");
-
- if((strncmp(buff, "SINGLE", 6)!= 0)&&(strncmp(buff, "single",6)!=0)
- &&(strncmp(buff, "MULTI", 5)!= 0)&&(strncmp(buff, "multi",5)!=
- 0))
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT FORMAT SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- ExitBAD;
- }
-
- if((strncmp(buff, "SINGLE", 6)== 0)||(strncmp(buff, "single",6)==0))
- {
- buff = buff + 6;
- buff = TrimBlanks(buff);
- format = SINGLE_FILE;
- if (mLog) printf("Format Single File\n");
- }
- else
- {
- buff = buff + 5;
- buff = TrimBlanks(buff);
- format = MULTI_FILE;
- if (mLog) printf("Format Multi File\n");
- }
-
- if((*buff != '!')&&(*buff != '\0'))
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT FORMAT SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- ExitBAD;
- }
-
- hdr_flag = 0;
-
-
- while(hdr_flag != 1)
- {
- if(fgets(obuffer, 134, file_ptr) == NULL)
- {
- if (mLog) fprintf(stderr, "\nINCORRECT FORMAT SPECIFICATION\n");
- ExitBAD;
- }
-
- len = strlen(obuffer);
- *(obuffer + (len-1)) = '\0';
-
- buff = TrimBlanks(obuffer);
-
- switch(*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- default:
- hdr_flag++;
- break;
- }/* switch */
- }/* end while */
-
- }/* end if */
- else
- {
- format = MULTI_FILE;/* default case */ /* V1.2 */
- if (mLog) printf("Format Multi File\n");
- }
- /***********************************/
- for (index = 0; index<= 4; index++)
- {
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr,obuffer,
- "\nINCORRECT CDF INFORMATION\n");
-
- if(GetValue(buff, dummy) != 0)
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT FORMAT SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- else
- {
- switch(index)
- {
- case 0:
- {
- num_vars = atoi(dummy);
- if (mLog) printf("Variables: %ld\n", num_vars);
- buff = buff + StringTraverse(buff);
- }
- break;
- case 1:
- {
- num_gattrs = atoi(dummy);
- if (mLog) printf("Global Attributes: %ld\n",
- num_gattrs);
- buff = buff + StringTraverse(buff);
- }
- break;
- case 2:
- {
- num_vattrs = atoi(dummy);
- if (mLog) printf("Variable Attributes: %ld\n",
- num_vattrs);
- buff = buff + StringTraverse(buff);
- }
- break;
- case 3:
- {
- num_recs = atoi(dummy);
- if (mLog) printf("Records: %ld\n", num_recs);
- buff = buff + StringTraverse(buff);
- }
- break;
- case 4:
- {
-
- num_dims = atoi(dummy);
-
- if(num_dims < 0||num_dims > CDF_MAX_DIMS)
- {
- if (mLog) {
- fprintf(stderr,"%s",
- "INCORRECT NUMBER OF DIMENSIONs\n" );
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
- if (mLog)
- printf("Dimensions: %ld\n", num_dims);
-
- buff = buff + StringTraverse(buff);
- }
- default:
- break;
- }/* end switch */
- }/* end else */
- }/* end for */
- /******************************************************************
- Important - assumed that 1) All cdf info is present
- 2) All the info is in one line
- ***************************************************************/
-
-
- for (index = 0; index<= num_dims - 1; index++)
- {
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT FORMAT SPECIFICATION\n");
-
- if(GetValue(buff, dummy) != 0)
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT FORMAT SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
- else
- {
-
- ptr = dummy;
-
- while(*ptr != '\0')
- {
- if(!isdigit(*ptr))/* if not a digit */
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT DIMENSION SIZE\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- ExitBAD;
- }
-
- ptr++;
- }
-
- dim_sizes[index] = atoi(dummy);
- if (mLog) printf("Sizes: %ld\n", dim_sizes[index]);
- buff = buff + StringTraverse(buff);
- }
- }
-
- if (delete_if_exists) {
- status = CDFlib (OPEN_, CDF_, cdf_name, &id,
- DELETE_, CDF_,
- NULL_);
- if (status != NO_SUCH_CDF) StatusHandler (status);
- }
-
- status = CDFlib (CREATE_, CDF_, cdf_name, num_dims, dim_sizes, &id,
- PUT_, CDF_ENCODING_, coding,
- CDF_MAJORITY_, major1,
- CDF_FORMAT_, format,
- NULL_);
- StatusHandler (status);
-
- free(encoding);
- free(majority);
-
- }
-
-
- void AnalyseGlobalAttr()
- {
- int hdr_flag = 0, len;
- char *buff;
-
-
- while(hdr_flag != 1)/* to first seek the "#header" */
- {
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) fprintf(stderr,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
- DeleteCDF(id);
- ExitBAD;
- }
-
-
- len = strlen(obuffer);/* to insert in the end */
-
- obuffer[len-1] = '\0';
-
- buff = &obuffer[0];
-
- buff = TrimBlanks(obuffer);/* get past white spaces before
- the header */
-
- switch(*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- case '#':
- {
- if(strncmp(buff,"#GLOBALattributes",17)==0)
- {
- buff = buff + 17;
- /* get past the above */
- buff = TrimBlanks(buff);
- switch(*buff)
- {
- case '\0':
- hdr_flag++;
- break;
- case '!':
- hdr_flag++;
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT GLOBAL ATTRIBUTE HEADER SPECIFICATION\n");
- fprintf( stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* end switch */
- }/* end if */
- else if (strncmp(buff,"#end",4) == 0)
- {
- buff = buff + 4;
- buff = TrimBlanks(buff); /* get past the above */
- switch(*buff)
- {
- case '\0':
- {
- CloseCDF(id);
- Exit;
- }
- break;
- case '!':
- {
- CloseCDF(id);
- Exit;
- }
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT GLOBAL ATTRIBUTE HEADER SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* end switch */
- }/* end else if */
- else
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT GLOBAL ATTRIBUTE HEADER SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }/* end else */
- }
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT GLOBAL ATTRIBUTE HEADER SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* end switch */
- } /* end while */
-
- hdr_flag = 0;
-
- while(hdr_flag != 1)/* to seek global attribute names*/
- {
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- len = strlen(obuffer);/* to insert in the end */
-
- obuffer[len-1] = '\0';
-
- buff = &obuffer[0];
-
- buff = TrimBlanks(obuffer);/* get past white spaces before
- the header */
-
-
- switch(*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- case '#':/* see if it is variableattribute */
- {
- if(strncmp(buff,"#VARIABLEattributes",19)==0)
- {
- buff = buff + 19;
- buff = TrimBlanks(buff);
- switch(*buff)
- {
- case '\0':
- hdr_flag++;/* ok */
- break;
- case '!':
- hdr_flag++;/* ok */
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* switch */
- }/* end if*/
- else if (strncmp(buff,"#end", 4) == 0)
- {
- buff = buff + 4;
- buff = TrimBlanks(buff);
- switch(*buff)
- {
- case '\0':
- {
- CloseCDF(id);
- Exit;
- }
- break;
- case '!':
- {
- CloseCDF(id);
- Exit;
- }
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT #END SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* switch */
- }/* end else if */
- else/* not #globalattributes or #end */
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT #END SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- }
- break;
- default:
- {
- AnalyseAttrInfo(buff);
- }
- break;
- }/* end switch */
- }/* end while */
- }
-
- /*-----------------------------------------------------------------*/
-
- void AnalyseAttrInfo(buff)
- char buff[];
- {
- int i, len, flag = 0, hdr_flag = 0, eflag = 0, gets_flag =0,
- e_index;
-
- char attrib_name[80], data_type[80],
- entry_num[80], *temp_addr, *dummy_ptr;
-
-
- /*printf("-----------------------------------------------------\n");*/
-
- len = StringTraverse(buff);/* inclusive of delimiters */
-
-
- ParseDString(buff, *buff);/* parses the delimited string
- puts it in str_ptr, no change to buff */
-
-
- strcpy(attrib_name, str_ptr);/* copy from str_ptr */
-
- free(str_ptr);/* free the space for the next line */
-
- str_ptr = NULL;/* set it to null for future/recursive use */
- c_ptr = NULL;
-
- status = CDFattrCreate(id, attrib_name, GLOBAL_SCOPE, &cdf_attr_num);
- StatusHandler (status);
-
- strcpy(data_type,"");/* initialise data type for further check */
-
- while(hdr_flag == 0)
- { /* look for information for that attribute */
-
- if(gets_flag==0)/* flag for attribute name read */
- {/* just after the attribute name is read */
- buff = buff + strlen(attrib_name) + 2;/* to get past the
- last delimiter - 2 for the 2 delims */
-
- buff = TrimBlanks(buff);/* to get to the entry num */
-
- switch(*buff)/* in case nothing after that */
- {
- case '\0':
- {
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
-
- }
- break;
- case '!':
- {
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
- }
- break;
- default:
- break;
- }/* end switch */
-
- gets_flag++;/* incrementing so that the next time read with entry num*/
- }/* end if*/
- else
- {
-
- eflag = 0;/* flag to see if any char has been reached */
- while(eflag != 1)
- {
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- len = strlen(obuffer);
- obuffer[len-1] = '\0';
- buff = TrimBlanks(obuffer);
-
- switch(*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- case '.':
- {
- buff++;/* get past the . */
- buff = TrimBlanks(buff);
- switch(*buff)
- {
- case '!':
- break;
- case '\0':
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* end switch */
- return;/* all data for an attribute name read */
- }
- /* break; */ /* Unreachable. */
- case '#':
- {
- if(strncmp(buff,"#end",4) == 0)
- {
- buff = buff + 4;
-
- buff = TrimBlanks(buff);
-
- if((*buff == '!')||(*buff == '\0'))
- {
- CloseCDF(id);
- Exit;
- }
- }
- else
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- }
- break;
- default:
- eflag++;/* get out of the loop - buff is the entry num */
- }/* end switch */
- }/* end while */
- }/* end else */
-
-
- temp_addr = buff;
-
- flag = 0;/* reinitialise in case of more than 1 entrynum */
-
- while(flag == 0)/* to read the entrynum */
- {
- switch(*buff)
- {
- case '\0':
- flag = 1;
- break;
- case '!':
- flag = 1;
- break;
- case ' ':
- flag = 1;
- break;
- case ':':
- flag = 2;
- break;
- default:
- buff++;/* otherwise increment */
- break;
- }/*end switch */
-
- }/* end while */
-
- /* if diff data type */
-
-
-
-
- strncpy(entry_num, temp_addr, buff - temp_addr);
-
- *(entry_num + (buff - temp_addr)) = '\0';
-
- /*printf("entry_num %s\n", entry_num);*/
-
- dummy_ptr = entry_num;
-
- if(*dummy_ptr == '\0')
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT ENTRY NUMBER SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- while(*dummy_ptr != '\0')
- {
- if(!isdigit(*dummy_ptr))
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT ENTRY NUMBER SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- dummy_ptr++;
- }
-
- cdf_entry_num = atoi(entry_num) - 1;/* internally c style
- externally fortran style */
-
- e_index = 0;
-
- while(*(entry_num + e_index) != '\0') /*31 bug fix*/
- {
- *(entry_num + e_index) = ' ';
- e_index++;
- }
-
- switch(flag)
- {
- case 1:/* in case a blank space was encountered after entry_num*/
- {
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
-
- if(*buff != ':')/* no : after entry num */
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- buff++;/* move past the : */
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
-
- }/* end case 1*/
- break;
- case 2:/* in case a ':' was encountered after entry_num*/
- {
- buff++;/* move past the : */
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
-
- }
- break;/* case 2 */
- }/* end switch */
-
- /* look for data type */
-
- switch(*buff)
- {
- case '{':/* if data type not previously specified */
- {
- if(strcmp(data_type,"")==0)
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- else/* aasumes that the previous data type is valid */
- {
- /*printf("Data type: %s\n", data_type)*/;
- }
- }
- break;/* get out with buff = { */
-
- default:/* a *buff that is not \0, ! or { */
- {
- buff = ParseDataType(buff,data_type);
- cdf_data_type = AnalyseDataType(data_type);/**/
- /*printf("Data type: %s\n", data_type);*/
- }
- break;
- }/* end switch */
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT GLOBAL ATTRIBUTE SPECIFICATION\n");
-
- switch (*buff)/* to work on the '{' char */
- {
- case '{':
- buff++;/* get past the breace */
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECTLY SPECIFIED VALUE FOR GLOBAL ATTRIBUTE\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* end switch */
-
-
- buff = TrimBlanks(buff);
-
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECTLY SPECIFIED VALUE FOR GLOBAL ATTRIBUTE\n");
-
- if((cdf_data_type == CDF_CHAR)||(cdf_data_type == CDF_UCHAR))
- {
-
- hdr_flag = ParseValue(file_ptr, buff, *buff,
- "\nINCORRECTLY SPECIFIED CHARACTER VALUE FOR GLOBAL ATTRIBUTE\n");
-
- /*printf("Value: %s\n", str_ptr);*//* global pointer */
-
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, (long) strlen(str_ptr), str_ptr);
- StatusHandler (status);
-
- free(str_ptr);
- str_ptr = NULL;/* to be used when allocating recursive space */
- /*c_ptr[0] = NULL*/;
- }
- else
- {
-
- hdr_flag = ParseNumericValue(file_ptr,
- buff, '}',
- "\nINCORRECTLY SPECIFIED NUMERIC VALUE FOR GLOBAL ATTRIBUTE\n");
- /* to remove the
- breaces, and store it in str_ptr. It stiil contains ',' and blank
- spaces */
- /*printf("Value: %s\n", str_ptr);*//* global pointer */
-
- cdf_num_elements = ProcessNumericString();
-
- TypeConvertString(cdf_num_elements);
- /* assumed that global attributes not epoch data type */
-
- /*i= 0;
- while(*(c_ptr + i) != NULL)
- {
- printf("Ind. Value: %s\n", *(c_ptr + i));
- i++;
- }
- i = 0;
- while(i <= cdf_num_elements -1)
- {
- printf("Ind. Num %d\n", *(int2_ptr + i));
- i++;
- }*/
-
- switch(cdf_data_type)
- {
- case CDF_INT1:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, cdf_num_elements, int1_ptr);
-
- free(int1_ptr);
- }
- break;
- case CDF_INT2:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, cdf_num_elements, int2_ptr);
- free(int2_ptr);
- }
- break;
- case CDF_INT4:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, cdf_num_elements, int4_ptr);
-
- free(int4_ptr);
- }
- break;
- case CDF_UINT1:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, cdf_num_elements, uint1_ptr);
-
- free(uint1_ptr);
- }
- break;
- case CDF_UINT2:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, cdf_num_elements, uint2_ptr);
-
- free(uint2_ptr);
-
- }
- break;
- case CDF_UINT4:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, cdf_num_elements, uint4_ptr);
-
- free(uint4_ptr);
- }
- break;
- case CDF_REAL4:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, cdf_num_elements, real4_ptr);
-
- free(real4_ptr);
- }
- break;
- case CDF_REAL8:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, cdf_num_elements , real8_ptr);
-
- free(real8_ptr);
- }
- break;
- case CDF_BYTE:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, cdf_num_elements, int1_ptr);
-
-
- free(int1_ptr);
- }
- break;
- case CDF_FLOAT:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type, cdf_num_elements, real4_ptr);
-
- free(real4_ptr);
- }
- break;
- case CDF_DOUBLE:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type,cdf_num_elements, real8_ptr);
-
- free(real8_ptr);
- }
- break;
- case CDF_EPOCH: /* V1.1... */
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_entry_num,
- cdf_data_type,cdf_num_elements, real8_ptr);
-
- free(real8_ptr);
- }
- break; /* ...V1.1 */
- }/* end switch */
- StatusHandler (status);
-
- i = 0;
- while(*(c_ptr + i) != NULL)/* the array of strings*/
- {
- dummy_ptr = (char *) *(c_ptr + i);
- free(dummy_ptr);
- i++;
- }
-
- cfree(c_ptr);
- c_ptr = NULL;
-
-
- free(str_ptr);
-
- str_ptr = NULL;/* to be used when allocating recursive space */
-
-
- }/* end else */
- }/* end while */
- }
-
-
- void AnalyseVariableAttr()
- {
- int v_flag, len;
- char *buff;
- v_flag = 0;
- while(v_flag != 1)/* to seek the first variable attrname */
- {
- if(fgets(obuffer,134,file_ptr)==NULL)
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT VARIABLE ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- len = strlen(obuffer);
-
- *(obuffer + (len - 1)) = '\0';
-
- buff = TrimBlanks(obuffer);
- switch(*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- case '#':
- {
- if(strncmp(buff,"#variables", 10 )== 0)
- {
- buff = buff + 10;
- buff = TrimBlanks(buff);
-
- if((*buff != '\0')&&(*buff != '!'))
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT VARIABLE ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- v_flag++;/* get out of the loop*/
- }
- else if (strncmp(buff,"#end",4)== 0)
- {
- buff = buff + 4;
-
- if((*buff != '\0')&&(*buff != '!'))
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECT VARIABLE ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- else
- {
- CloseCDF(id);
- Exit;
- }
- }/* end else if */
- else
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT VARIABLE ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }/* end else */
- }
- break;
- default:
- AnalyseVattrInfo(buff);
- break;
- }/* end switch */
- }/* end while*/
- }
-
- /*--------------------------------------------------------------------*/
-
- void AnalyseVattrInfo(buff)/* called when a delimited
- string is encountered */
- char buff[];
- {
- char *v_attr, *temp_addr;
- int len;
-
- ParseDString(buff, *buff);/* no change to buff */
-
- len = strlen(str_ptr);
-
- v_attr = (char *)malloc(len + 1);
-
- strcpy(v_attr, str_ptr);
- *(v_attr + len) = '\0';
-
- temp_addr = buff;/* address of 1st delim */
- buff++;/* get past the 1st delim */
-
- buff = strchr(buff, *temp_addr);/* to find the address of end delim */
-
- len = (buff - temp_addr) + 1;/* length till last delim */
-
- buff = temp_addr + len;/* get past the last delim */
-
- if((*buff != '\0')&&(*buff != '!'))/* unrec char after the delim */
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT VARIABLE ATTRIBUTE SPECIFICATION\n\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- status = CDFattrCreate(id, v_attr, VARIABLE_SCOPE, &cdf_attr_num);
- StatusHandler (status);
-
- free(v_attr);
- free(str_ptr);
- str_ptr = NULL;
- }
-
-
-
- void AnalyseVariables()/*called at the variable name point*/
- {
- long hdr_flag = 0, len;
- char *buff;
-
-
- hdr_flag = 0;
-
- while(hdr_flag != 1)/* to seek variable names*/
- {
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT VARIABLE SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- len = strlen(obuffer);/* to insert in the end */
-
- *(obuffer + (len - 1)) = '\0';
-
-
- buff = TrimBlanks(obuffer);/* get past white spaces before
- the header */
-
-
- switch(*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- case '#':/* see if it ends */
- {
- if(strncmp(buff,"#end",4)==0)
- {
- buff = buff + 4;
- buff = TrimBlanks(buff);
-
- switch(*buff)
- {
- case '\0':
- hdr_flag++;/* ok */
- break;
- case '!':
- hdr_flag++;/* ok */
- break;
- default:
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT END SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- }/* switch */
- }/* end if */
- else
- {
- if (mLog) {
- fprintf(stderr, "\nINCORRECT END SPECIFICATION\n");
- fprintf(stderr, "%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- }
- break;
- default:
- AnalyseVarInfo(buff);
- /*called when the start of the var name */
- break;
- }/* end switch */
-
- }/* end while */
-
- CloseCDF(id);
- }
-
- /*------------------------------------------------------------------*/
-
- void AnalyseVarInfo(buff)
- char buff[];
- {
-
- char *var_name, *var_data_type, *str_size, *attr_name,
- attr_data_type[80], *dummy_ptr;
-
- long i, len, var_array[11], v_flag, eol_flag, flag, /*1 for record variance*/
- *dim_array, n_flag, a_flag;
-
- long str_len, NRV_num, dum_data_type, str_size_num;
-
- ParseDString(buff, *buff);/* parse the delimited variable name in str_ptr
- buff remains unchanged*/
-
- var_name = (char *)malloc(strlen(str_ptr) + 1);
-
- strcpy( var_name, str_ptr);
-
- /*printf("Variable name: %s\n", var_name);*/
-
- *(var_name + (strlen(var_name))) = '\0';
-
- free(str_ptr);
-
- str_ptr = NULL;
-
- len = strlen(var_name) + 2;/* 2 for the 2 delimiters */
-
- buff = buff + len;/* get past the variable name */
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines( file_ptr, obuffer,
- "INCORRECT VARIABLE SPECIFICATION\n");
-
-
- len = StringTraverse(buff);
-
- var_data_type = (char *)malloc(len + 1);/* for var data type */
-
- strncpy(var_data_type, buff, len);
-
- *(var_data_type + (len)) = '\0';
-
-
- /*printf("Variable Data Type: %s\n", var_data_type);*/
-
-
- buff = buff + len;/* get past the data type */
-
-
- buff = TrimBlanks(buff);/* get to the string size */
-
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT VARIABLE SPECIFICATION\n");
-
- len = StringTraverse(buff);/* the string size */
-
- str_size = (char *)malloc(len + 1);
-
- strncpy(str_size, buff, len);
-
-
- *(str_size + (len)) = '\0';
-
- /*printf("String Size: %s\n", str_size);*/
-
-
- buff = buff + len;
-
- buff = TrimBlanks(buff);
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECT VARIABLE SPECIFICATION\n");
-
- ParseVariances(file_ptr, buff, var_array, obuffer);
- /* assumed that all variances are in one line */
-
- dim_array = var_array;/* dim_array is an array of d. variances*/
-
- dim_array++;/* now it points to the start of the dimensions*/
-
- cdf_data_type = AnalyseDataType(var_data_type);
-
-
- if((cdf_data_type == CDF_CHAR)||(cdf_data_type == CDF_UCHAR))
- str_size_num = atoi(str_size);/* V1.3 */
- else
- str_size_num = 1;/* num_elements */
-
-
- status = CDFvarCreate(id, var_name, cdf_data_type, str_size_num,
- *var_array, dim_array, &cdf_var_num);
- StatusHandler (status);
-
- dum_data_type = cdf_data_type;/* for nrv usage */
-
-
- /*strupper(var_name);*//* V1.3 */
-
- #if 0 /* V1.1... */
- if((strncmp(var_name,"EPOCH",5) == 0)||(strncmp(var_name,"epoch",5) == 0))
- n_flag = 1;/* to be used for epoch string conversion */
- else
- n_flag = 0;/* fixed a trouble some bug */
- #endif /* ...V1.1 */
- n_flag = 0; /* V1.1? */
-
- free(var_data_type);
- free(str_size);
-
- /***********************************/
-
- strcpy(attr_data_type,"");
- v_flag = 0;/* for variable attributes */
-
- while(v_flag != 1)
- {
- flag = 0;
-
- while(flag != 1)/* to seek variable attribute names*/
- {
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT VARIABLE ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr,"%s\n", obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- len = strlen(obuffer);/* to insert in the end */
-
- *(obuffer + (len-1)) = '\0';
-
-
- buff = TrimBlanks(obuffer);/* get past white spaces before
- the header */
-
-
- switch(*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- case '.':
- {
- buff++;/* get past the */
- buff = TrimBlanks(buff);
-
- if((*buff != '!')&&(*buff != '\0'))
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT VARIABLE SPECIFICATION\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- else
- {
- if(*var_array == NOVARY)
- {
- NRV_num = ComputeNRVNum(var_array, num_dims, dim_sizes);
- /* for number of NRV values */
-
- if(NRV_num == 0)/* case where all dim var is false */
- NRV_num++;/* made to 1 V1.3 */
-
- AnalyseNRVData(NRV_num,num_dims,var_name, str_size_num);
- /* if nrv variable read data */
-
- }
- free(var_name);
- return;/* end of variable attribute data */
- }
- }
- break;
- default:
- flag++;
- break;
- }/* end switch */
- }/* end while */
-
- /*printf("----------------------------------------------------------\n");*/
-
- /*len = StringTraverse(buff); */
-
- ParseDString(buff, *buff);/* buff is unchanged */
-
- str_len = strlen(str_ptr);
-
- attr_name = (char *) malloc(str_len + 1);/* cant do it in 1 step */
-
- strcpy(attr_name, str_ptr);
-
- *(attr_name + str_len) = '\0';
-
- /*printf("Variable Attribute Value: %s\n", attr_name);*/
-
- free(str_ptr);
- len = strlen(attr_name) + 2;/* 2 for the 2 delimiters */
-
- cdf_attr_num = CDFattrNum(id, attr_name);
-
- if(cdf_attr_num < 0)/* negative */
- {
- if (mLog) {
- fprintf(stderr, "\nUNRECOGNISED ATTRIBUTE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- /*printf("attribute number %ld\n", cdf_attr_num);*/
-
- str_len = strlen(attr_name);
- dummy_ptr = (char *) malloc(str_len + 1);
- strcpy(dummy_ptr, attr_name);
- *(dummy_ptr + (str_len + 1)) = '\0';
- strupper(dummy_ptr);
-
- a_flag = 0;
-
- #if 0 /* V1.1... */
- if((strcmp(dummy_ptr, "VALIDMIN") == 0)||
- (strcmp(dummy_ptr, "VALIDMAX") == 0)||
- (strcmp(dummy_ptr, "SCALEMIN") == 0)||
- (strcmp(dummy_ptr, "SCALEMAX") == 0))
- a_flag = 1;
- #endif /* ...V1.1 */
-
- free(dummy_ptr);/* not needed any more */
-
- free(attr_name);/* after creating it */
-
- buff = buff + len;/* get past the variable attr name */
-
-
- buff = TrimBlanks(buff);
-
- eol_flag = 0;
-
- switch(*buff)
- {
- case '\0':
- {
- eol_flag = 1;
- }
- break;
- case '!':
- {
- eol_flag = 1;
- }
- break;
- default:
- break;
- }/* end switch */
-
- if(eol_flag == 1)
- {
- flag = 0;
-
- while(flag != 1)/* to seek variable attribute datatypes*/
- {
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT VARIABLE ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- len = strlen(obuffer);/* to insert in the end */
-
- *(obuffer + (len -1)) = '\0';
-
- buff = TrimBlanks(obuffer);/* get past white spaces before */
-
- switch(*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- default:
- flag++;
- break;
- }/* end switch */
- }/* end while */
- }/* end if */
-
-
-
- if((*buff == '{')&&(strcmp(attr_data_type,"")==0))
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT VARIABLE ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- else if(*buff != '{')
- {
- buff = ParseDataType(buff, attr_data_type);
-
- /*printf("Data Type: %s\n", attr_data_type);*/
-
- buff = TrimBlanks(buff);
-
- eol_flag = 0;
-
- switch(*buff)
- {
- case '!':
- eol_flag = 1;
- break;
- case '\0':
- eol_flag = 1;
- break;
- default:
- break;
- }/* end switch */
-
- if(eol_flag == 1)
- {
- flag = 0;
-
- while(flag != 1)/* to seek variable attribute datatypes*/
- {
- if(fgets(obuffer, 134, file_ptr)==NULL)
- {
- if (mLog) {
- fprintf(stderr,"\nINCORRECT VARIABLE ATTRIBUTE SPECIFICATION\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- len = strlen(obuffer);/* to insert in the end */
-
- *(obuffer + (len-1)) = '\0';
-
-
- buff = TrimBlanks(obuffer);/* get past white spaces before */
-
-
-
- switch(*buff)
- {
- case '\0':
- break;
- case '!':
- break;
- default:
- flag++;
- break;
- }/* end switch */
- }/* end while */
- }/* end if */
- }/* end else if */
- else/* no data type specified */
- {
- /*printf("Data Type: %s\n", attr_data_type);*/
- }
-
- /* Copy the attribute data type and check for epoch conversion */
-
-
- cdf_data_type = AnalyseDataType(attr_data_type);
-
-
- if(*buff != '{')
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECTLY SPECIFIED VALUE FOR VARIABLE ATTRIBUTE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
-
- buff++;/* get past the { */
-
- buff = TrimBlanks(buff);/* to eliminate spaces between */
- /* the { and delim */
-
-
- if((*buff == '\0')||(*buff == '!'))
- buff = ProcessWrapLines(file_ptr, obuffer,
- "\nINCORRECTLY SPECIFIED VALUE FOR VARIABLE ATTRIBUTE\n");
-
- switch(*buff)
- {
- /*
- **********
- V2.1
- **********
- case '!':
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECTLY SPECIFIED VALUE FOR VARIABLE ATTRIBUTE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break;
- case '\0':
- {
- if (mLog) {
- fprintf(stderr,
- "\nINCORRECTLY SPECIFIED VALUE FOR VARIABLE ATTRIBUTE\n");
- fprintf(stderr,"%s\n",obuffer);
- }
- DeleteCDF(id);
- ExitBAD;
- }
- break; */
- default:
- {
- if((cdf_data_type == CDF_CHAR)||(cdf_data_type == CDF_UCHAR))
- {
- str_ptr = NULL;/* precondition for next function call */
-
- v_flag = ParseValue(file_ptr, buff, *buff,
- "\nINCORRECTLY SPECIFIED CHARACTER VALUE FOR VARIABLE ATTRIBUTE\n");
-
- /*printf("Attribute Value: %s\n", str_ptr);*/
-
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, (long) strlen(str_ptr), str_ptr);
- StatusHandler (status);
-
- free(str_ptr);
- str_ptr = NULL;
- cdf_data_type = dum_data_type;/* now has the var type*/
- }
- else
- {
- str_ptr = NULL;/* precondition for next function call */
-
- v_flag = ParseNumericValue(file_ptr, buff, '}',
- "\nINCORRECTLY SPECIFIED NUMERIC VALUE FOR GLOBAL ATTRIBUTE\n");
-
- /*printf("Attribute Value: %s\n", str_ptr);*/
-
- cdf_num_elements = ProcessNumericString();/* number of values*/
-
- if((n_flag == 1)&&(a_flag == 1))/* epoch string */
- TypeConvertString(cdf_num_elements); /* to put it the
- appropriate array after epoch conversion*/
- else
- TypeConvertString(cdf_num_elements); /* to put it the
- appropriate array */
- /*i= 0;
- while(*(c_ptr + i) != NULL)
- {
- printf("Ind. Value: %s\n", *(c_ptr + i));
- i++;
- }
- i = 0;
- while(i <= cdf_num_elements -1)
- {
- printf("Ind. Num %d\n", *(int2_ptr + i));
- i++;
- }*/
-
- switch(cdf_data_type)
- {
- case CDF_INT1:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements, int1_ptr);
-
- free(int1_ptr);
- }
- break;
- case CDF_INT2:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements, int2_ptr);
- free(int2_ptr);
- }
- break;
- case CDF_INT4:
- {
-
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements, int4_ptr);
- free(int4_ptr);
- }
- break;
- case CDF_UINT1:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements, uint1_ptr);
-
- free(uint1_ptr);
- }
- break;
- case CDF_UINT2:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements, uint2_ptr);
-
- free(uint2_ptr);
- }
- break;
- case CDF_UINT4:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements, uint4_ptr);
-
- free(uint4_ptr);
- }
- break;
- case CDF_REAL4:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements, real4_ptr);
-
- free(real4_ptr);
- }
- break;
- case CDF_REAL8:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements , real8_ptr);
-
- free(real8_ptr);
-
- a_flag = 0;/* for subsequent attr for the same var name */
- /*n_flag = 0;*/
- }
- break;
- case CDF_EPOCH: /* V1.1... */
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements , real8_ptr);
-
- free(real8_ptr);
- }
- break; /* ...V1.1 */
- case CDF_BYTE:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements, int1_ptr);
-
- free(int1_ptr);
- }
- break;
- case CDF_FLOAT:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type, cdf_num_elements, real4_ptr);
-
- free((real4_ptr));
- }
- break;
- case CDF_DOUBLE:
- {
- status = CDFattrPut(id, cdf_attr_num, cdf_var_num,
- cdf_data_type,cdf_num_elements, real8_ptr);
-
- free(real8_ptr);
- }
- break;
- }/* end switch */
- StatusHandler (status);
-
- i = 0;
- while(*(c_ptr + i) != NULL)
- {
- /*printf("Ind Value: %s\n", *(c_ptr + i));*/
- dummy_ptr = (char *) *(c_ptr + i);
- free(dummy_ptr);
- i++;
- }/* end while */
-
- cfree(c_ptr);
- c_ptr = NULL;
-
- free(str_ptr);
- str_ptr = NULL;
-
- cdf_data_type = dum_data_type;/* now has the var type*/
-
- }/* end else */
- }
- break;
- }/* end switch */
- }/* end while */
-
- if(*var_array == NOVARY)
- {
-
- NRV_num = ComputeNRVNum(var_array, num_dims, dim_sizes);
- /* for number of NRV values */
-
- if(NRV_num == 0)/* case where all dim var is false */
- NRV_num++;/* made to 1 V1.3 */
-
- AnalyseNRVData(NRV_num, num_dims,var_name, str_size_num);
- /* if nrv variable read data */
-
- }
- free(var_name);
- }
-